package br.requisiteworks.requisito.modelo;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public enum TipoDado {

	/**
	 * Tipo texto
	 */
	String,

	/**
	 * Tipo numerico
	 */
	Number {
		@Override
		public Object asObject(String value) {
			if (value == null || value.isEmpty()) {
				return null;
			}
			return Integer.parseInt(value);
		}

		@Override
		public String asString(Object value) {
			return ((Integer) value).toString();
		}
	},

	/**
	 * Tipo data
	 */
	Date {
		private final DateFormat format = new SimpleDateFormat("dd/MM/yyyy");

		@Override
		public Object asObject(String value) {
			if (value == null || value.isEmpty()) {
				return null;
			}
			try {
				return format.parse(value);
			} catch (ParseException e) {
				throw new RuntimeException(
						"Error while parsing date: " + value, e);
			}
		}

		@Override
		public String asString(Object value) {
			return DateFormat.getInstance().format((Date) value);
		}
	},

	Boolean {
		@Override
		public Object asObject(java.lang.String value) {
			if (value == null || value.isEmpty()) {
				return null;
			}
			return java.lang.Boolean.getBoolean(value);
		}

		@Override
		public java.lang.String asString(Object value) {
			return java.lang.String.valueOf(value);
		}
	};

	public int number;

	private TipoDado() {
		this.number = this.ordinal();
	}

	public Object asObject(String value) {
		if (value == null || value.isEmpty()) {
			return null;
		}
		return value;
	}

	public String asString(Object value) {
		return value.toString();
	}
}
